package com.kaifamiao.set;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/**
 * 0、HashSet 不保证元素的顺序
 * 1、在 HashSet 内部 采用 哈希表 来存储 元素
 *    本质上是借助于一个 HashMap 实例来存储 元素 (因此实际上还是用 数组 + 链表 + 红黑树来存储)
 * 2、将 元素 添加到 HashSet 中时，会根据 元素 的 hashCode 来确定 元素 的存放位置
 * 3、HashSet 的直接父类是 AbstractSet类
 * 4、HashSet 中的 元素 可以为 null
 * 5、HashSet 不是 线程安全 的
 * 6、HashSet 类的 iterator 方法返回的迭代器是 快速失败 的
 */
public class AnalyseHashSet {

    public static void main(String[] args) {

        HashSet<String> set = new HashSet<>();

        set.add( "李元芳" ); // map.put( "李元芳", PRESENT )
        set.add( null ); // map.put( null, PRESENT )
        System.out.println( set );

        System.out.println( set.add( "李元芳" ) );

        set.remove( null ); // map.remove( null )
        System.out.println( set );

        set.addAll( Set.of("李元芳", "李元霸", "李元婴") );
        System.out.println( set );

        Iterator<String> itor = set.iterator();
        while( itor.hasNext() ) {
            String name = itor.next();
            System.out.println( name );
        }

    }

}
